generic
   type model is private;
   with function Creer return model is <>;
   with function Mettre(T : model; x : objet) return model is <>;
   with function Retirer(T : model; x : objet) return model is <>;
   --with function Dans(T : model; x: objet) return boolean is <>;
   Access_Dans : access function (T : model; X : objet) return boolean := null;
--with function Taille(T : model) return natural is <>;
Access_Taille : access function (T : model) return natural := null;
--with function Ieme(T : model; i : natural) return objet is <>;
Access_Ieme : access function (T : model; i : natural) return objet := null;


package taso_abstract.implementation is

   type tas is new taso_abstract.tas with private;

   function Creer return tas;
   function Mettre(T : tas; x : objet) return tas;
   function Retirer(T : tas; x : objet) return tas;
   function Dans(T : tas; x: objet) return boolean;
   function Taille(T : tas) return natural;
   function Ieme(T : tas; i : natural) return objet;


private

   type tas is new taso_abstract.tas with record
      s : model;
   end record;

end taso_abstract.implementation;
